package note;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.*;

/**
 * 在桌面上嵌入一个应用程序窗口并且不允许用户移动这个窗口
 */
public class NonMoveWindowExample {

    static int w = 500; // 宽
    static int h = 300; // 高

    public static void main(String[] args) {
        JFrame frame = new JFrame("简易便签");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(w, h); // 设置窗体的大小

        // 添加窗口监听器来禁止移动窗口 不能移动的窗口
        frame.addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
            }

            @Override
            public void windowClosing(WindowEvent e) {
            }

            @Override
            public void windowClosed(WindowEvent e) {
            }

            @Override
            public void windowIconified(WindowEvent e) {
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
            }

            @Override
            public void windowActivated(WindowEvent e) {
            }

            @Override
            public void windowDeactivated(WindowEvent e) {
            }
        });

        frame.setUndecorated(true); // 设置为无边框窗口 没有标准窗口装饰（如标题栏、边框、关闭按钮等）的窗口
        // frame.setOpacity(0.0f); // 设置窗体的透明度 完全透明 看不到 必须先设置frame.setUndecorated(true)
        // frame.setOpacity(0.1f); // 设置窗体的透明度
        // frame.setOpacity(0.4f); // 设置窗体的透明度
        frame.setOpacity(0.5f); // 设置窗体的透明度
        // frame.setOpacity(0.7f); // 设置窗体的透明度

        // Java Swing 如何设置JFrame透明的解决办法 https://blog.csdn.net/JavaBuilt/article/details/79897042
        // frame.setBackground(new Color(0,0,0,0));


        // 嵌入桌面
        // 设置窗口不可移动
        Toolkit toolkit = Toolkit.getDefaultToolkit();

        // 如何让java一个窗口全屏显示 https://blog.51cto.com/u_16213450/7409349
        // 获取本地图形环境 获取显示设备
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

        // 获取默认的图形设备
        GraphicsDevice gd = ge.getDefaultScreenDevice();
        // 设置全屏
        if (gd.isFullScreenSupported()) {
            // 是否支持全屏模式
            try {
                // gd.setFullScreenWindow(frame);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        GraphicsDevice[] gds = ge.getScreenDevices(); // 获取所有屏幕设备的数组

        for (GraphicsDevice gd1 : gds) {
            // 处理每个屏幕设备
            /**
             * D3DGraphicsDevice[screen=0]
             * D3DGraphicsDevice[screen=1]
             */
            System.out.println(gd1);
        }
        if (gds.length > 1) {
            // 如果有多个桌面，将窗口移动到第二个桌面
            // 【Java】多显示屏时，让窗体默认在显示屏2显示（Java swing） https://blog.csdn.net/weixin_44099953/article/details/136436754
            //选择显示屏，0是显示屏1，1是显示屏2
            Rectangle bounds = gds[1].getDefaultConfiguration().getBounds();

            // 置顶
            frame.setAlwaysOnTop(true);

            // 设置窗口位置
            // 居中了
            // frame.setLocation(bounds.x + bounds.width / 2 - w / 2, bounds.y + bounds.height / 2 - h / 2);
            // 左上角
            frame.setLocation(bounds.x, 0);

        }

        // 需要有内容 没有内容会看不见
        // 向 JFrame 添加一个 JButton 组件
        // JButton button = new JButton("Click Me");
        // frame.getContentPane().add(button);

        // java 实现桌面便签 https://blog.51cto.com/u_16175449/7022834

        // Java Swing 图形界面开发（目录） https://blog.csdn.net/xietansheng/article/details/72814492
        // Java Swing-JTextArea的使用 https://www.cnblogs.com/kongbursi-2292702937/p/14053714.html
        final JTextArea textArea = new JTextArea();

        // 创建一个加粗的字体
        // Font font = new Font("Serif", Font.BOLD, 20);
        Font font = new Font("Arial", Font.BOLD, 20);

        // 应用字体到JTextArea
        textArea.setFont(font);

        // 设置文本区域的背景颜色
        // textArea.setBackground(Color.LIGHT_GRAY);
        // textArea.setBackground(Color.YELLOW);
        // 设置文本区域中文本的颜色
        // textArea.setForeground(Color.RED);

        textArea.setMargin(new Insets(10, 10, 10, 10)); // 为文本区域添加内外边距

        textArea.setEditable(false); // 只读，不可编辑
        // textArea.setEnabled(false); // 设置组件是否可用

        JScrollPane scrollPane = new JScrollPane(textArea);

        // JButton saveButton = new JButton("保存");
        // saveButton.addActionListener(new ActionListener() {
        //     public void actionPerformed(ActionEvent e) {
        //         try {
        //             BufferedWriter writer = new BufferedWriter(new FileWriter("note.txt"));
        //             writer.write(textArea.getText());
        //             writer.close();
        //         } catch (IOException ex) {
        //             ex.printStackTrace();
        //         }
        //     }
        // });

        // JButton loadButton = new JButton("加载");
        // loadButton.addActionListener(new ActionListener() {
        //     public void actionPerformed(ActionEvent e) {
        //         textArea.setText(readFile());
        //     }
        // });

        textArea.setText(readFile());

        // 添加菜单栏和加载功能
        // JFileChooser fileChooser = new JFileChooser();
        // if (fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) {
        //     try (BufferedReader reader = new BufferedReader(new FileReader(fileChooser.getSelectedFile()))) {
        //         String line;
        //         StringBuilder sb = new StringBuilder();
        //         while ((line = reader.readLine()) != null) {
        //             sb.append(line);
        //             sb.append("\n");
        //         }
        //         textArea.setText(sb.toString());
        //         JOptionPane.showMessageDialog(frame, "加载成功！");
        //     } catch (IOException e) {
        //         JOptionPane.showMessageDialog(frame, "加载失败：" + e.getMessage());
        //     }
        // }

        // 底部按钮
        // JPanel buttonPanel = new JPanel();
        // buttonPanel.add(saveButton);
        // buttonPanel.add(loadButton);

        frame.add(scrollPane, BorderLayout.CENTER);
        // frame.add(buttonPanel, BorderLayout.SOUTH);

        // Swing 中的 frame.pack() 方法 https://blog.csdn.net/weixin_63490470/article/details/135210783
        // frame.pack(); // 确保窗口大小恰当地适应包含的组件 智能地根据窗口内的组件计算出最适合的尺寸
        // frame.setLocationRelativeTo(null); // 窗口位置 将窗口置于屏幕中心 通常是左上角

        // 显示窗口
        frame.setVisible(true);
    }


    private static String readFile() {
        StringBuilder content = new StringBuilder();

        try (FileReader fileReader = new FileReader("note.txt");
             BufferedReader reader = new BufferedReader(fileReader);
        ) {
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line).append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return content.toString();
    }

}

